#include <iostream>

using std::cout;
using std::endl;

//定义了纯虚函数的类，称为抽象类
class A
{
public:
    //纯虚函数, 没有实现, 只是作为接口出现
    virtual void display() =0;
    virtual void print() = 0;
};

class B
: public A
{
public:
    //当派生类中只实现了基类的某一个纯虚函数时，
    //该类依然是抽象类
    void display()
    {   cout << "B::display()" << endl; }
};

class C
: public B
{
public:
    void print()
    {   cout << "C::print()" << endl;  }
};

int main()
{
    //A a;//error, 抽象类无法实例化对象
    //B b;//error, B只实现了一个纯虚函数，依然是抽象类
    C c;
    A * pa = &c;//基类指针指向了派生类对象
    pa->display();//基类指针调用虚函数
    pa->print();
    return 0;
}

